const wxUser = require('./ORM'); // 表模型
const WXBizDataCrypt = require('./WXBizDataCrypt');

/**
 * 1.获取用户 openid
 * 2.根据用户 id 查询 用户信息
 * 3.如果没有查询到、通过获取解密数据、将数据保存数据库、返回数据
 */
async function getUserProfile(req, res, sessionKey, openid) {
  const appId = process.env.appid;
  const encryptedData = req.query.encryptedData;
  const iv = req.query.iv;
  const pc = await new WXBizDataCrypt(appId, sessionKey);
  const data = pc.decryptData(encryptedData, iv);
  data.openid = openid;
  createDB(data); // 写入数据
  return res.api_success(data);
}

function createDB(data) {
  return wxUser
    .create(data)
    .then(res => {
      console.log(res);
    })
    .catch(err => {
      console.log(err);
    });
}

module.exports = async (req, res, sessionKey, openid) => {
  try {
    // 数据库查找
    const data = await wxUser.findOne({
      where: {
        openid: openid
      }
    });
    // 查找到用户
    if (data) {
      res.api_success(data);
    } else {
      await getUserProfile(req, res, sessionKey, openid); // 请求获取用户信息
    }
  } catch (err) {
    console.log(err);
  }
};
